home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / dflt14.zip / COMBOBOX.C < prev    next >
Text File  |  1992-07-29  |  4KB  |  126 lines

  1. /* -------------- combobox.c -------------- */
  2.  
  3. #include "dflat.h"
  4.  
  5. int ListProc(WINDOW, MESSAGE, PARAM, PARAM);
  6.  
  7. int ComboProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  8. {
  9.     switch (msg)    {
  10.         case CREATE_WINDOW:
  11.             wnd->extension = CreateWindow(
  12.                         LISTBOX,
  13.                         NULL,
  14.                         wnd->rc.lf,wnd->rc.tp+1,
  15.                         wnd->ht-1, wnd->wd+1,
  16.                         NULL,
  17.                         wnd,
  18.                         ListProc,
  19.                         HASBORDER | NOCLIP | SAVESELF);
  20.             ((WINDOW)(wnd->extension))->ct->command =
  21.                                         wnd->ct->command;
  22.             wnd->ht = 1;
  23.             wnd->rc.bt = wnd->rc.tp;
  24.             break;
  25.         case PAINT:
  26.             foreground = WndBackground(wnd);
  27.             background = WndForeground(wnd);
  28.             wputch(wnd, DOWNSCROLLBOX, WindowWidth(wnd), 0);
  29.             break;
  30.         case KEYBOARD:
  31.             if ((int)p1 == DN)    {
  32.                 SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
  33.                 return TRUE;
  34.             }
  35.             break;
  36.         case LEFT_BUTTON:
  37.             if ((int)p1 == GetRight(wnd) + 1)
  38.                 SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
  39.             break;
  40.         case CLOSE_WINDOW:
  41.             SendMessage(wnd->extension, CLOSE_WINDOW, 0, 0);
  42.             break;
  43.         default:
  44.             break;
  45.     }
  46.     return BaseWndProc(COMBOBOX, wnd, msg, p1, p2);
  47. }
  48.  
  49. int ListProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  50. {
  51.     WINDOW pwnd = GetParent(GetParent(wnd));
  52.     DBOX *db = pwnd->extension;
  53.     WINDOW cwnd = ControlWindow(db, wnd->ct->command);
  54.     char text[130];
  55.     int rtn;
  56.     WINDOW currFocus;
  57.     switch (msg)    {
  58.         case CREATE_WINDOW:
  59.             wnd->ct = DFmalloc(sizeof(CTLWINDOW));
  60.             wnd->ct->setting = OFF;
  61.             wnd->WindowColors[FRAME_COLOR][FG] = 
  62.                 wnd->WindowColors[STD_COLOR][FG];
  63.             wnd->WindowColors[FRAME_COLOR][BG] = 
  64.                 wnd->WindowColors[STD_COLOR][BG];
  65.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  66.             return rtn;
  67.         case SETFOCUS:
  68.             if ((int)p1 == FALSE)    {
  69.                 SendMessage(wnd, HIDE_WINDOW, 0, 0);
  70.                 wnd->ct->setting = OFF;
  71.             }
  72.             else
  73.                 wnd->ct->setting = ON;
  74.             break;
  75.         case SHOW_WINDOW:
  76.             if (wnd->ct->setting == OFF)
  77.                 return TRUE;
  78.             break;
  79.         case BORDER:
  80.             currFocus = inFocus;
  81.             inFocus = NULL;
  82.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  83.             inFocus = currFocus;
  84.             return rtn;
  85.         case LB_SELECTION:
  86.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  87.             SendMessage(wnd, LB_GETTEXT,
  88.                             (PARAM) text, wnd->selection);
  89.             PutItemText(pwnd, wnd->ct->command, text);
  90.             SendMessage(cwnd, PAINT, 0, 0);
  91.             cwnd->TextChanged = TRUE;
  92.             return rtn;
  93.         case KEYBOARD:
  94.             switch ((int) p1)    {
  95.                 case ESC:
  96.                 case FWD:
  97.                 case BS:
  98.                     SendMessage(cwnd, SETFOCUS, TRUE, 0);
  99.                     return TRUE;
  100.                 default:
  101.                     break;
  102.             }
  103.             break;
  104.         case LB_CHOOSE:
  105.             SendMessage(cwnd, SETFOCUS, TRUE, 0);
  106.             return TRUE;
  107.         case CLOSE_WINDOW:
  108.             if (wnd->ct != NULL)
  109.                 free(wnd->ct);
  110.             wnd->ct = NULL;
  111.             break;
  112.         default:
  113.             break;
  114.     }
  115.     return DefaultWndProc(wnd, msg, p1, p2);
  116. }
  117.  
  118. void PutComboListText(WINDOW wnd, enum commands cmd, char *text)
  119. {
  120.     CTLWINDOW *ct = FindCommand(wnd->extension, cmd, COMBOBOX);
  121.     if (ct != NULL)        {
  122.         WINDOW lwnd = ((WINDOW)(ct->wnd))->extension;
  123.         SendMessage(lwnd, ADDTEXT, (PARAM) text, 0);
  124.     }
  125. }
  126.